package com.tedu.api.ee;

import org.junit.Test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * 流--传输数据--传输数据过程绝对不能出错【处理手段】
 * 标准流结合异常---标准IO
 *
 * 异常
 * java面向对象语言，程序中所出现的所有错误，定义为对象【处理对应错误】
 *
 * Throwable 顶级异常超类
 *
 * Exception异常:描述程序级别的错误--有解决方案
 *              编译期：RunTimeException异常表示类
 *                    FileOutputSteam创建对象--波浪线--抛出方法之外
 *              检查异常：通常都是编译器检查处理，程序直接报错，抛出
 *              解决方案：①捕获异常（*）
 *                      ②抛出异常--抛出方法之外--打印控制台
 *
 *              运行期：控制台直接显示异常对象【异常对象名字，产生原因】
 *              非检查异常：控制台输入异常对象名称，RunTimeException异常表示类
 *              最后了解【throw与throws---RunTimeException】
 *
 * Error错误：描述系统级别错误--出现--程序宕机
 *          非常低-->递归问题-->
 *
 */
public class EE {
    /**
     * Error 错误--程序严重错误
     * 模拟：方法调方法--栈溢出错误
     * StackOverflowError栈溢出错误
     * --------
     * while（ture）{
     *     拼接字符串对象
     * }
     */
    public static void method(){
        method();
    }
    @Test
    public void testError(){
        EE.method();
    }

    /**
     * Exception异常：检查异常【出现编译期】---代码报波浪线
     *               两种处理手段：①捕获异常
     *                          语法：try{
     *                              怀疑代码可能有异常或者提示异常
     *                          }catch（小异常名字 e）{
     *                            e.printStacktrace();  打印异常信息
     *                          }catch（中异常名字 e）{
     *                              e.printStacktrace();  打印异常信息
     *                          }catch（大异常名字 e）{ Exception
     *                               e.printStacktrace();  打印异常信息
     *                          }final{
     *
     *                          }
     *                          快捷键：ctrl+alt+T
     *                      考试题：throw与throws
     *                      异常关键字：throw
     *                                throws
     *                          ②抛出异常  throws  异常名字
     *               非检查异常【出现编译期】---代码无错误--控制台
     * -------------------------------------------------------
     * 异常：FileNotFoundException 文件不存在异常
     * 产生原因:路径写错，文件名写错
     * 异常：NullPointerException   空指针异常
     * 产生原因：获取字符串为空，数组：值为空，集合：元素为空
     *          1+null
     * 异常：StringIndexOutOfBoundsException  字符串下标越界异常
     * 产生原因：字符串下标没有对应的字符
     * 异常：NumberFormatException 数字转换异常
     * 产生原因
     */
    @Test
    public void testException() throws FileNotFoundException{
        //检查异常【出现编译期】--代码报波浪线
        //FileOutputStream fis=new FileOutputStream("");
        //非检查异常【出现运行期】--控制台
        try {
            String str = "a";
            str.length();
            str.charAt(1);
            Integer.parseInt(str);//解析字符串--转换为对应类型
        }catch (StringIndexOutOfBoundsException e){
            e.printStackTrace();//打印异常对象信息
            System.out.println("小异常：下标越界异常");
        }catch (NumberFormatException e){
            e.printStackTrace();
            System.out.println("字符串小异常：");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("");
        }finally {
            System.out.println("");
        }
    }
    /**
     * 作业1：写出5个【非检查】异常的代码示例
     * 提示：查API--java.lang.异常
     *      字符串、包装类、集合、IO流
     */
    @Test
    public void testHomeWork1(){
        //1.StringIndexOutOfBoundsException字符串下标越界异常
        //2.NullPointerException 空指针异常
        //3.NumberFormatException 不符合包装类格式要求异常
        //4.FileNotFoundException 文件不存在异常
        //5.ArrayIndexOutOfBoundsException 数组下标越界异常

    }
}
